﻿using System;
using System.Text;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using zdzh.zdmgr.BLL;
using zdzh.zdmgr.COL;
using zdzh.zdmgr.SFL;

namespace zdzh.zdmgr.UIL.Main
{
    /// <summary>
    /// 对象名称：Asp.Net系统信息对话框
    /// 对象说明：显示系统运行时的异常信息和系统提示信息。
    /// 作者姓名：爱英思躺（QQ：2415540409）
    /// 编写日期：2010/06/01 14:28:32
    /// </summary>
    public partial class SysMessage : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //如果运行时有异常发生，优先显示异常信息。
            if (HttpContext.Current.Error != null)
            {
                ShowExceptionMessage();
                return;
            }

            //如果没有异常，判断是否有系统消息需要显示。
            if (!string.IsNullOrEmpty(Request.QueryString["Message"]))
            {
                LblMessage.Text = HtmlSwitch.HtmlEncode(Request.QueryString["Message"]);
                BtnOK.Attributes.Add("onclick", "location='" + Request.QueryString["NextUrl"] + "';return false;");
                return;
            }

            //如果即没有异常，也没有系统消息，将浏览器回退到上一页面。
            GotoPrevPage();

        }

        /// <summary>
        /// 显示操作成功类消息提示，可以指定nextUrl参数，在消息显示完成后转向到下一指定页面。
        /// 如果Web.config中的ShowSuccessMsg为false，将不显示操作成功信息而直接进入指定页面。
        /// </summary>
        /// <param name="message">所要显示的消息内容</param>
        /// <param name="nextUrl">下一转向地址</param>
        public static void ShowSuccessMsg(string message, string nextUrl)
        {
            if (System.Configuration.ConfigurationManager.AppSettings["ShowSuccessMsg"] == "true")
            {
                HttpContext.Current.Server.Transfer("../Main/SysMessage.aspx?NextUrl=" + nextUrl + "&Message=" + message);
                return;
            }
            HttpContext.Current.Response.Redirect(nextUrl);
        }

        /// <summary>
        /// 显示系统运行时的异常信息。
        /// </summary>
        private void ShowExceptionMessage()
        {
            Exception exception = HttpContext.Current.Error.InnerException;
            LblMessage.Text = HtmlSwitch.HtmlEncode(exception.Message);
            LblDetailMessage.Visible = false;
            ImgIcon.ImageUrl = "../Images/TipError.png";
            ImgTitle.ImageUrl = "../Images/MessageError.png";
            BtnOK.Attributes.Add("onclick", "history.go(-1);return false;");

            if (exception is CustomException)
            {
                CustomException customException = exception as CustomException;
                switch (customException.Type)
                {
                    case ExceptionType.Info:
                        ImgIcon.ImageUrl = "../Images/TipInfo.png";
                        ImgTitle.ImageUrl = "../Images/MessageInfo.png";
                        break;

                    case ExceptionType.Warn:
                        ImgIcon.ImageUrl = "../Images/TipWarn.png";
                        ImgTitle.ImageUrl = "../Images/MessageWarn.png";
                        break;

                    default:
                        ImgIcon.ImageUrl = "../Images/TipError.png";
                        ImgTitle.ImageUrl = "../Images/MessageError.png";
                        break;

                }
                if (System.Configuration.ConfigurationManager.AppSettings["ShowExceptionDetail"] == "true")
                {
                    LblDetailMessage.Visible = true;
                    LblDetailMessage.Text = HtmlSwitch.HtmlEncode(customException.DetailMessage);
                }
            }

        }

        /// <summary>
        /// 将浏览器回退到上一页面。
        /// </summary>
        private void GotoPrevPage()
        {
            StringBuilder codeStr = new StringBuilder();
            codeStr.AppendLine("<script language=\"javascript\" type=\"text/javascript\">");
            codeStr.AppendLine("    history.go(-1);");
            codeStr.AppendLine("</script>");
            Response.Write(codeStr.ToString());
            Response.End();
        }


    }
}
